//
// Created by Administrator on 2021/5/27.
//

//两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
//
//给出两个整数 x 和 y，计算它们之间的汉明距离。
#include <vector>
#include <iostream>

using namespace std;

class Solution {
public:
    int hammingDistance(int x, int y) {
        int ans = 0;
        while (x > 0 or y > 0) {
            int xR = x & 1;
            int yR = y & 1;
            ans += xR ^ yR;
            x >>= 1;
            y >>= 1;
        }
        return ans;
    }

    int hammingDistance2(int x, int y) {
        return __builtin_popcount(x ^ y);  // 计算为1的位数 内置函数
    }

    int hammingDistance3(int x, int y) {
        int s = x ^y, ans = 0;
        while (s) {
            ans += s & 1;
            s >>= 1;
        }
        return ans;
    }


};

int main() {
    Solution sol;
    cout << sol.hammingDistance3(1, 4) << endl;
//    int a = 7;
//    for (int i = 1; i < 4; ++i) {
//        cout << (a & 1) << endl;
//        a >>= 1;
//    }
    return 0;
}